package config

import (
	"encoding/json"
	"fmt"
	"os"
	"path/filepath"
)

type KeyMapping struct {
	SourceKey      string `json:"source_key"`
	DestinationKey string `json:"destination_key"`
}

type Config struct {
	Mappings []KeyMapping   `json:"mappings"`
	Settings SystemSettings `json:"settings"`
}

type SystemSettings struct {
	AutoOpenConfig bool `json:"auto_open_config"`
}

var configPath string

// InitConfig 初始化配置路径
func InitConfig(exeDir string) {
	configPath = filepath.Join(exeDir, "config.json")
}

func LoadConfig() (*Config, error) {
	if configPath == "" {
		// 如果未初始化，则获取可执行文件路径
		exePath, err := os.Executable()
		if err != nil {
			return nil, fmt.Errorf("获取程序路径失败: %v", err)
		}
		configPath = filepath.Join(filepath.Dir(exePath), "config.json")
	}

	data, err := os.ReadFile(configPath)
	if err != nil {
		if os.IsNotExist(err) {
			return &Config{}, nil
		}
		return nil, err
	}

	var config Config
	err = json.Unmarshal(data, &config)
	return &config, err
}

func SaveConfig(config *Config) error {
	data, err := json.MarshalIndent(config, "", "  ")
	if err != nil {
		return err
	}
	return os.WriteFile(configPath, data, 0644)
}
